Tengo base de datos de usuarios donde han creado su equipo. y otro documento para almacenar corredores.
cada usuario puede crear un equipo de 6 corredores.
pero el problema es que tengo 50k usuarios y uso el siguiente código para eliminar a un corredor de su equipo si el administrador lo eliminó del documento Racers.
estoy usando express.js y mangosta
El equipo es una matriz de objetos que tiene el nombre de los corredores, su código abreviado y un identificador único.
async function delete(req, body){ // code to validate users input await Users.updateMany({'tema.shortCode': 'HAM'}, { $pull: {'team.shortCode': 'HAM'}}) }He visto que el tiempo de respuesta disminuye si elimino la palabra clave await. Pero es recomendable hacer eso.
No, no deberías eliminar el await . Quitar la await significa que si la llamada Users.updateMany se rechaza, el error no podrá manejarse fácilmente, ya que se convertiría en un rechazo de promesa no manejado.
const fail = async message => Promise.reject(message) const usingAwait = async () => { await fail('using await') } const noAwait = async () => { fail('no await') } const handleError = error => console.log('Handled error:', error) ;(async () => { await usingAwait().catch(handleError) // logs Handled error: using await await noAwait().catch(handleError) // doesn't log anything! })()La regla typescript-eslint @typescript-eslint/no-floating-promises tiene más detalles sobre esto:
Las promesas no manejadas pueden causar varios problemas, como operaciones secuenciadas incorrectamente, rechazos de promesas ignoradas y más. Las formas válidas de manejar una declaración con valor de promesa incluyen
await, regresar y llamar a.then()con dos argumentos o.catch()con un argumento.
La forma de acelerar las cosas sería usar algo como Promise.all si está haciendo varias delete que no dependen del resultado de cada una:
const reqs = [[req1, body1], /* ... */] await Promise.all(reqs.map(async ([req, body]) => delete(req, body))